import axios from "axios";
import {getTokenName, messageConfirm, messageTip, removeToken} from "../util/util.js";
import {ElMessage, ElMessageBox} from "element-plus";

//定义后端接口地址的前缀
axios.defaults.baseURL="http://localhost:8089";

export function doGet(url,params){
    return axios({
        method:'get',
        url:url,
        params:params, //{name:'张三',age:22}
        dataType:'json'
    })
}

export function doPost(url,data){
    return axios({
        method:'post',
        url:url,
        data:data, //{name:'张三',age:22}
        dataType:'json'
    })
}

export function doPut(url,data){
    return axios({
        method:'put',
        url:url,
        data:data, //{name:'张三',age:22}
        dataType:'json'
    })
}

export function doDelete(url,params){
    return axios({
        method:'delete',
        url:url,
        params:params, //{name:'张三',age:22}
        dataType:'json'
    })
}

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么，在请求头中放一个token，传给后端接口
    let token = window.sessionStorage.getItem(getTokenName());
    //判断sessionStorage是否为空
    if(!token){
        token = window.localStorage.getItem(getTokenName());
        if(token) {
            config.headers['rememberMe'] = true;
        }
    }
    //如果token存在，向请求头放一个token。携带token访问；
    if(token){
        config.headers['Authorization'] = token;
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么，拦截token验证的结果，进行相应的提示和页面跳转
    //如果token大于900，说明jwt验证没有通过
    if(response.data.code > 900) {
        //给前端用户提示
        messageConfirm(response.data.msg + "," + "是否重新登录？").then(() => {  //用户点击“确定”触发then函数
            //既然后端验证token未通过，那么删除即可
            removeToken();
           //跳转到登录页
            window.location.href='/';
        }).catch(() => {    //用户点击“取消”触发catch函数
            messageTip("取消登录",'warning');
        })
        return ;
    }
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});

